﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using _4.Modelado.Seguridad;

namespace _1.Presentacion.Utilidades
{
    class Validaciones
    {

        internal static void CerrarFormulario(Form xForm)
        {
            xForm.Close();
            xForm.Dispose();
        }

        /// <summary>
        /// Limpia informacion de objetos
        /// </summary>
        /// <param name="xControl">Los controles del form </param>
        internal static void LimpiarControles(Control xControl)
        {
            foreach (Control _Ctr in xControl.Controls)
            {
                if (_Ctr.GetType().Equals(typeof(TextBox)))
                    _Ctr.Text = string.Empty;

                if (_Ctr.GetType().Equals(typeof(CheckBox)))
                    ((CheckBox)_Ctr).Checked = false;

                if (_Ctr.GetType().Equals(typeof(DateTimePicker)))
                {
                    ((DateTimePicker)_Ctr).Value = DateTime.Now;
                    ((DateTimePicker)_Ctr).Text = DateTime.Now.ToString();
                }

                if (_Ctr.GetType().Equals(typeof(GroupBox)))
                    LimpiarControles(_Ctr);

                if (_Ctr.GetType().Equals(typeof(Panel)))
                    LimpiarControles(_Ctr);


            }
        }


        /// <summary>
        /// Valida todos los controles del esten llenos form
        /// </summary>
        /// <param name="xControl">Los controles del form </param>
        /// <param name="xErrorProvider">El objeto que va a mostrar el error </param>
        /// <param name="cantErrores">Devuelve la cantidad de campos que estan vacíos </param>
        internal static void Validar(Control xControl, ErrorProvider xErrorProvider, ref  int cantErrores)
        {

            foreach (Control _Ctr in xControl.Controls)
            {   //Valida si es Textbox 
                if (_Ctr.GetType() == typeof(TextBox))
                {
                    if (((TextBox)_Ctr).ReadOnly) return;
                    xErrorProvider.SetError(_Ctr, string.Empty);
                    if (_Ctr.Text.Trim().Equals(string.Empty))
                    {
                        if (_Ctr.Name.Contains("Ignore") == false)
                        {
                            xErrorProvider.SetError(_Ctr, "Debe llenar el campo requerido");
                            _Ctr.Focus();
                            cantErrores = cantErrores + 1;
                        }
                    }
                }//Valida si es MaskedTextbox
                if (_Ctr.GetType().Equals(typeof(MaskedTextBox)))
                {
                    xErrorProvider.SetError(_Ctr, string.Empty);
                    ((MaskedTextBox)_Ctr).TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
                    if (_Ctr.Text.Trim().Equals(string.Empty))
                    {
                        if (_Ctr.Name.Contains("Ignore") == false)
                        {
                            xErrorProvider.SetError(_Ctr, "Debe llenar el campo requerido");
                            _Ctr.Focus();
                            cantErrores = cantErrores + 1;
                        }

                    }
                    ((MaskedTextBox)_Ctr).TextMaskFormat = MaskFormat.IncludeLiterals;
                }
                //Valida si es un contenedor
                if (_Ctr.GetType().Equals(typeof(GroupBox)) || _Ctr.GetType().Equals(typeof(Panel)))
                {
                    Validar(_Ctr, xErrorProvider, ref cantErrores);

                }
            }

        }

        internal static void SoloLetras(KeyPressEventArgs e)
        {
            char letras;
            letras = e.KeyChar;

            if (char.IsLetter(letras) || char.IsSeparator(letras)) //Solo letras
            {
                e.Handled = false;
            }

            else if (char.IsControl(letras)) //Para retroceder(borrar)
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
            }

        }

        internal static void SoloNumerosEnteros(KeyPressEventArgs e)
        {
            char letras;
            letras = e.KeyChar;


        }

        internal static void SoloNumerosDecimales(KeyPressEventArgs e)
        {
            char letras;
            letras = e.KeyChar;

            if (char.IsDigit(letras)) //Acepta solo NUMEROS
            {
                e.Handled = false;
            }

            else if (char.IsControl(letras))  //Para poder RETROCEDER (BORRAR)
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }

        }

        internal static void NumerosLetras(KeyPressEventArgs e)
        {
            char letras;
            letras = e.KeyChar;

            if (char.IsDigit(letras) || char.IsLetter(letras)) //Acepta numeros y letras
            {
                e.Handled = false;
            }

            else if (char.IsControl(letras))  //Para poder RETROCEDER (BORRAR)
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
            }

        }

        internal static void CargarUsuarioLogueado(Label usuario, Label fecha)
        {
            usuario.Text = VariableGlobales.snombreUsuario;
            fecha.Text = DateTime.Today.ToString();

        }
        /// <summary>
        /// Indica si el usuario logueado cuenta
        /// con permisos para ver el formulario deseado
        /// </summary>
        /// <param name="lista"> Lista de permisos activos para el usuario logueado</param>
        /// <param name="Permiso">Permiso que necesita</param>
        /// <returns> devuelve true si encuentra el permiso</returns>
        internal static bool ComprobarPermisos(List<Permiso> lista, int Permiso)
        {
            bool flag = false;
               for (int i = 0; i < lista.Count; i++)
                { //habilita Permiso de Creacion 
                    if (lista[i].iPKPermiso == Permiso)
                    { flag= true;
                    }
                }
            return flag;
        }
          
        
    }
}
